package org.wzy.spring.framework.core;

/**
 * 模拟 Spring 的 BeanFactory 接口, 提供最基本的 getBean() 等方法
 *
 * @author wzy_h
 * @version v_1.0
 * @date 2018/5/20 18:46
 * @since 1.8
 */
public interface BeanFactory {

    /**
     * 创建 Bean 、依赖注入的核心方法.
     * 通过读取 BeanDefinition 中的信息然后反射创建一个实例返回.
     * <p>
     * Spring 原生的处理是使用装饰器模式将原始对象包装为 BeanWrapper 返回.
     * 装饰器模式:
     * 1.保留原来的OOP关系;
     * 2.方便日后的扩展、增强(AOP)
     * <p>
     * 注意, Spring 只负责创建 Bean, 不负责销毁
     *
     * @param beanName 想要获取的 bean 名称
     * @return 初始化后的 Bean 对象
     * @author wzy_h
     * @date 2018/5/20 18:49
     * @since 1.8
     */
    Object getBean(String beanName) throws Exception;
}
